package com.org.khtn.data;

import java.io.IOException;
import java.util.Map;
import java.util.Vector;

/**
 * quản lý các hoạt động của database
 * 
 * @author Son
 * 
 */
public class Manager {
	private static final String String = null;
	DataTables dataTables;
	Database database;
	String dataLocation;
	final String className = "Manager:";

	public Manager(String DataLocation) {
		dataLocation = DataLocation;
		LoadData();

	}

	public static void main(String[] args) {
		Manager tam = new Manager("mytest\\data.json");
		//	System.out.println(tam.getTablePrimaryKey("qlhs", "hocsinh"));
	}

	public void LoadData() {
		database = new Database(dataLocation);
		try {
			database.LoadData();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

	
	public void createDatabase(String name, String displayName, String path) {
		
		Data temp = new Data(name, displayName, path);
		database.add(temp);
	}

	/**
	 * Tạo table mới trong database
	 * 
	 * @param databaseName
	 *            tên database
	 * @param tableName
	 *            tên table
	 */
	public void createTable(String databaseName, String tableName) {
		database.createTable(databaseName, tableName);
	}

	/**
	 * Xóa 1 table trong database
	 * 
	 * @param databaseName
	 * @param tableName
	 */
	public void removeTable(String databaseName, String tableName) {

		database.removeTable(databaseName, tableName);
	}

	/**
	 * xoa database
	 * 
	 * @param name
	 */
	public void removeDatabase(String name) {
		database.removeData(name);

	}

	/**
	 * tra ve tat ca record cua 1 table
	 * 
	 * @param databaseName
	 *            tên database
	 * @param table
	 *            tên table
	 * @return Map<String,Map<String,String>>
	 */
	public Map<String, Map<String, String>> getAllTableRecord(
			String databaseName, String tableName) {
		return database.getAllTableRecord(databaseName, tableName);
	}
	public void setTablePrimaryKey(String databaseName, String tableName,Vector keys)
	{
		database.setTablePrimaryKey( databaseName, tableName, keys);
	}
	public Vector<String> getTablePrimaryKey(String databaseName,String tableName)
	{
		return database.getTablePrimaryKey(databaseName,tableName);
	}
	public void removeTablePrimaryKey(String databaseName,String tableName)
	{
		database.removeTablePrimaryKey(databaseName,tableName);
	}
	/**
	 * Xoa tất cả record của table nhưng vẫn giữ lại define
	 * @param databaseName
	 * @param tableName
	 */
	public void removeAllTableRecord(String databaseName, String tableName) {
		database.removeAllTableRecord(databaseName, tableName);
	}

	/**
	 * Lấy definition của table
	 * 
	 * @param databaseName
	 * @param tableName
	 * @return
	 */
	public Map<String, String> getTableDefines(String databaseName,
			String tableName) {
		final String methodName = "getTableDefines():";
		System.out.println(className + methodName);
		return database.getTableDefines(databaseName, tableName);

	}

	/**
	 * insert 1 field vao table da co san data, data se add mac dinh
	 * "put data.."
	 * 
	 * @param databaseName
	 * @param tableName
	 * @param fieldName
	 * @param fieldType
	 */
	public void insertTableField(String databaseName, String tableName,
			String fieldName, String fieldType) {
		database.insertTableField(databaseName, tableName, fieldName,
				fieldType, true);

	}

	/**
	 * Thay đổi tên của 1 field trong table
	 * 
	 * @param databaseName
	 * @param tableName
	 * @param fieldName
	 * @param fieldNameNew
	 */
	public void editTableFieldName(String databaseName, String tableName,
			String fieldName, String fieldNameNew) {
		database.editTableFieldName(databaseName, tableName, fieldName,
				fieldNameNew);
	}

	/**
	 * xóa tất cả các field của 1 table
	 * 
	 * @param databaseName
	 * @param tableName
	 */
	public void removeAllTableField(String databaseName, String tableName) {
		database.removeAllTableField(databaseName, tableName);
	}

	/**
	 * tạo field trong table
	 * 
	 * @param databaseName
	 *            tên database
	 * @param tableName
	 *            tên báº£ng
	 * @param fieldName
	 *            tên trÆ°á»�ng
	 * @param fieldType
	 *            kiá»ƒu cá»§a trÆ°á»�ng
	 */
	public void createTableField(String databaseName, String tableName,
			String fieldName, String fieldType) {
		database.createTableField(databaseName, tableName, fieldName, fieldType);

	}

	/**
	 * Xoa 1 field khoi table, data cung xoa
	 * 
	 * @param databaseName
	 * @param tableName
	 * @param fieldName
	 */
	public void removeTableField(String databaseName, String tableName,
			String fieldName) {
		database.removeTableField(databaseName, tableName, fieldName);
	}
	/**
	 * Xóa các file backup của database
	 * @param databaseName
	 */
	public void deleteBackupDatabase(String databaseName)
	{
		database.deleteBackupDatabase(databaseName);
	}
	/**
	 * Thay đổi kiểu giá trị của 1 field
	 * 
	 * @param databaseName
	 * @param tableName
	 * @param fieldName
	 * @param fieldType
	 */
	public void editTableFieldType(String databaseName, String tableName,
			String fieldName, String fieldType) {
		database.editTableFieldType(databaseName, tableName, fieldName,
				fieldType);
		// TODO Auto-generated method stub

	}

	public Map<String, Vector> getAllDatabase() {
		return database.getAllDatabase();
	}
	public void deleteTableRecord(String databaseName,String tableName,String rowID)
	{
		database.deleteTableRecord(databaseName,tableName,rowID);
	}
	/**
	 * tao  1 database cho file temp sang 1 file temp
	 * @return
	 */
	public void createTempDatabase(String databaseName) {
		database.createTempDatabase(databaseName);
	}
	public void backupDatabase(String databaseName)
	{
		database.backupDatabase(databaseName);
		
	}
	public Vector getAllDatabaseName()
	{
		return database.getAllDatabaseName();
	}
	/**
	 * thay đổi tất cả giá trị field của tất cả các record databaseName
	 * 
	 * @param databaseName
	 *            tên database
	 * @param tableName
	 *            tên table
	 * @param fieldName
	 *            tên field
	 * @param fieldValue
	 *            giá trị mới của field
	 */
	public void editValueAllRecord(String databaseName, String tableName,
			String fieldName, String fieldValue) {
		database.editAllRecord(databaseName, tableName, fieldName, fieldValue);

	}
	public Vector getAllTableName(String databaseName)
	{
		return database.getAllTableName(databaseName);
	}
	private void xuat(String[] a )
	{
		 System.out.print(className + "xuat(): a :" );
		for (String t : a)
		{
			System.out.print(t+"::");
				
		}
		 System.out.println();
	}
	/**
	 * insert 1 dong du lieu vao 1 bang
	 * 
	 * @param databaseName
	 * @param tableName
	 * @param fieldName
	 * @param fieldValue
	 */
	public void insertRecord(String databaseName, String tableName,
			String[] fieldName, String[] fieldValue) {
		xuat(fieldName);
		xuat(fieldValue);

		database.insertRecord(databaseName, tableName, fieldName, fieldValue);
	}

	public void editRecord(int idx, String databaseName, String tableName,
			String fieldName, String fieldValue) {
		database.editRecord(idx, databaseName, tableName, fieldName, fieldValue);
	}
}
